home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
201-225
/
225
/
amigatcp
/
src
/
hexload.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-13
|
3KB
|
114 lines
/*
* Hex loader program. Sends an ASCII file out the serial port to the
* loader running in the TNC-2 KISS loader ROM. Use this rather than
* just "COPY TNC2KISS.HEX to SER:" so we don't have to depend on what
* the preferences baud rate for the serial port is set to.
*
* Copyright (C) 1987
* Louis A. Mamakos
*
* For non-commercial use only. May not be sold, or included in any other
* product or collection of software that is sold for profit.
*/
#include <exec/types.h>
#include <functions.h> /* for Manx Aztec C, get func returns */
#include <exec/nodes.h>
#include <exec/lists.h>
#include <exec/ports.h>
#include <exec/devices.h>
#include <exec/io.h>
#include <devices/serial.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <stdio.h>
#ifndef DEFFILE
#define DEFFILE "tnc2kiss.hex"
#endif
#ifndef DEFBAUD
#define DEFBAUD 4800
#endif
struct IOExtSer serout;
struct MsgPort *seroutp;
struct FileHandle *hexfile;
char buffer[500];
extern int Enable_Abort;
int baud = DEFBAUD;
main(argc, argv)
int argc;
char **argv;
{
register long totlen = 0;
register long len;
strcpy(buffer, DEFFILE);
if ((argc > 1) && ((baud = atoi(argv[1])) > 0)) {
serout.io_Baud = baud;
argc--; argv++;
printf("Loading at %d baud\n", baud);
}
if (argc > 1)
strcpy(buffer, argv[1]);
hexfile = Open(buffer, MODE_OLDFILE);
Enable_Abort = 0;
if (hexfile == 0L) {
printf("Can't open file '%s'\n", buffer);
exit(1);
}
if ((seroutp = CreatePort(0L, 0L)) == NULL) {
printf("Can't create serial input port");
Close(hexfile);
exit(2);
}
/*
* Open serial device.
*/
serout.io_SerFlags = SERF_XDISABLED | SERF_RAD_BOOGIE; /* ? */
serout.io_Status = 0;
serout.io_Baud = baud;
if (OpenDevice("serial.device", 0L, &serout, 0L) != 0) {
printf("Can't open serial device");
DeletePort(seroutp);
Close(hexfile);
exit(2);
}
serout.IOSer.io_Message.mn_ReplyPort = seroutp;
serout.IOSer.io_Data = (APTR) buffer;
serout.IOSer.io_Length = 0;
serout.IOSer.io_Command = CMD_WRITE;
serout.IOSer.io_Flags = 0;
serout.io_SerFlags = SERF_XDISABLED | SERF_RAD_BOOGIE;
serout.io_Baud = baud;
serout.IOSer.io_Command = SDCMD_SETPARAMS;
if (DoIO(&serout))
printf("SETPARMS failed\n");
serout.IOSer.io_Command = CMD_WRITE;
serout.IOSer.io_Data = (APTR) buffer;
while ((len = Read(hexfile, buffer, (ULONG) sizeof(buffer))) > 0) {
serout.IOSer.io_Length = len;
if (DoIO(&serout))
printf("Serial write failed %ld\n",
serout.IOSer.io_Error);
totlen += len;
if (Chk_Abort()) {
printf("Hex load aborted!\n");
break;
}
}
printf("Wrote %ld bytes\n", totlen);
Close(hexfile);
CloseDevice(&serout);
DeletePort(seroutp);
}